import {
  type AxiosRequestConfig,
  type AxiosResponse,
  type InternalAxiosRequestConfig
} from 'axios';

export interface MyInterceptor<T = AxiosResponse> {
  // config理想的类型为InternalAxiosRequestConfig
  reqSuccessCallback?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig;
  reqFailCallback?: (error: any) => void;
  // 拦截器存在的目的就是为了得到我们理想的结果，所以这里返回泛型而不是any，将我们加工后的结果返回给调用者
  resSuccessCallback?: (res: T) => T;
  resFailCallback?: (error: any) => void;
}

export interface MyRequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  interceptors?: MyInterceptor<T>;
}
